package dao;

import bean.Feriado;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class FeriadoDAO {

    private Connection con;
    SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
    int prm ;


    public FeriadoDAO( ){
        try {
            this.con = new ConnectionFactory().getConnection();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(FeriadoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

     public void salvar(Feriado feriado) {
    	 
        String sqlInsert = "insert into feriados ( descricao, dataf ) values (  ?, ? )";
        try {	
            prm = 0;	
            PreparedStatement stmt = this.con.prepareStatement(sqlInsert);
            Statement s = con.createStatement( );
            stmt.setString(++prm, feriado.getDescricao() );	
            stmt.setDate(++prm, feriado.getData() );
            stmt.execute();
            s.execute("SHUTDOWN");
            stmt.close();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    
     public void editar(Feriado feriado) {
    	 
        String sqlEdit = "update feriados set "
                       + "descricao = ?, "
                       + "dataf = ? "
                       + "where id = ?";
        try {	
            prm = 0;
            PreparedStatement stmt = this.con.prepareStatement(sqlEdit);
            Statement s = con.createStatement( );
            stmt.setString(++prm, feriado.getDescricao  ( ) );
            stmt.setDate(++prm, feriado.getData( ) );
            stmt.setInt(++prm, feriado.getId() );
            stmt.execute();
            s.execute("SHUTDOWN");
            stmt.close();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
          
     public void deletar(Feriado feriado) {
        String insert = "delete from feriados where id = ?";
        try {	
            PreparedStatement stmt = this.con.prepareStatement(insert);
            stmt.setInt(1, feriado.getId( ) );
            stmt.execute( );
            stmt.close( );
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public List<Feriado> getLista() throws SQLException {
        String sql = "select * from feriados ";
        
        try {
            List<Feriado> lista_feriados = new ArrayList<Feriado>( );
            PreparedStatement stmt = this.con.prepareStatement( sql );
            ResultSet rs = stmt.executeQuery( );
            
            while ( rs.next( ) )
            {
                Feriado feriado = new Feriado( );
                feriado.setId( rs.getInt( "id" ) );
                feriado.setData( rs.getDate( "dataf" ) );
                feriado.setDescricao( rs.getString( "descricao" ) );
                lista_feriados.add(feriado);
            }
            rs.close();
            stmt.close();
            
            return lista_feriados;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    
     public List<Feriado> listaPeriodo(Date dt_ini, Date dt_fim) throws SQLException {
        String sql = "select * from feriados Where dataf >= ? and dataf <= ? ";
        try {
            List<Feriado> lista_feriados = new ArrayList<Feriado>( );
            PreparedStatement stmt = this.con.prepareStatement( sql );
            stmt.setDate( 1, dt_ini );	
            stmt.setDate( 2, dt_fim );
            ResultSet rs = stmt.executeQuery( );
            
            while ( rs.next( ) )
            {
                Feriado feriado = new Feriado( );
                feriado.setData( rs.getDate( "dataf" ) );
                feriado.setDescricao( rs.getString ( "descricao" ) );
                lista_feriados.add(feriado);
            }
            rs.close();
            stmt.close();
            
            return lista_feriados;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
        
    public List<Feriado> buscaDescricao(String str) throws SQLException {
        String sql = "select * from feriados where upper(descricao) like upper('%"+str+"%') limit 50";
        try {
            List<Feriado> lista_contatos = new ArrayList<Feriado>( );
            PreparedStatement stmt = this.con.prepareStatement( sql );
            ResultSet rs = stmt.executeQuery( );
            
            while ( rs.next( ) )
            {
                Feriado feriado = new Feriado( );
                feriado.setId  ( rs.getInt( "id") );
                feriado.setData( rs.getDate("dataf") );
                feriado.setDescricao( rs.getString( "descricao"   ) );
                lista_contatos.add(feriado);
            }
            rs.close();
            stmt.close();
            
            return lista_contatos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
           
}
